
#include "comm.hpp"


using namespace std;

int main(){
    Init init;  // 初始化类对象，创建管道，当对象销毁时，删除管道


    // 打开管道
    int fd = open(FIFO_FILE, O_RDONLY); // 以只读方式打开管道
    if (fd == -1) {
        // perror("open");
    
        exit(FIFO_OPEN_ERROR);
    }
    // 如果服务端打开了读端，但不存在写端，那么 open() 会阻塞等待写端打开  即不会打印这个句话
    cout << "open server read success" << endl; 


    // 服务端读取数据
    while (true){
        char buffer[1024] = {0};
        int x = read(fd, buffer, sizeof(buffer)); // 从管道中读取数据
        if (x > 0){
            buffer[x] = '\0'; // 加上结束符
            cout << "client say: " << buffer << endl;
        }
        else{
            cout << "client quit" << endl;
            break;
        }
    }
    // 对于管道文件，只要至少有一个写入端是打开的，read() 就会阻塞等待数据。 并不是未向管道写入数据，read就会返回<=0的值
    // 如果所有写入端都关闭 了，read() 就会返回 0，表示读取到了文件的末尾。

    close(fd);

    return 0;
}